﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Aga.Psad.Backend.Repositories;
using Aga.Psad.Backend.Entities;
using Aga.Psad.Mvc.Services.Dtos;

namespace Aga.Informatizacion.Despachos
{
    public partial class VerDespachos : Form
    {
        public List<Cliente> Clientes { get; set; }
        public List<ClienteDeCliente> ClientesDeClientes { get; set; }

        private int PageCount { get; set; }
        private int PageIndex { get; set; }
        private int PageSize { get; set; }

        public BindingList<DespachoDto> Despachos { get; set; }

        public VerDespachos()
        {
            InitializeComponent();

            this.PageSize = Properties.Settings.Default.PageSize;

            SetPageCount();
        }

        private void SetPageCount()
        {
            var repository = new DespachoRepository();
            int count = 0;

            //if (this.chkSoloSinSincronizar.Checked && !this.chkSoloInformatizados.Checked)
            //    count = repository.Count(d => d.Sincronizado);
            //else if (this.chkSoloInformatizados.Checked && this.chkSoloInformatizados.Checked)
            //    count = repository.Count(d => d.Sincronizado && d.IngresoManual);
            //else if (!this.chkSoloInformatizados.Checked && this.chkSoloInformatizados.Checked)
            //    count = repository.Count(d => d.IngresoManual);
            //else
                count = repository.Count();
            
            PageCount = Convert.ToInt32(Math.Ceiling((decimal)count / (decimal)PageSize));
        }

        private void VerDespachos_Load(object sender, EventArgs e)
        {
            CargarClientes();
            MostrarDespachos();
        }

        private void CargarClientes()
        {
            ClienteRepository clientes = new ClienteRepository();
            ClienteDeClienteRepository clientesDeClientes = new ClienteDeClienteRepository();

            Clientes = clientes.GetAll();
            ClientesDeClientes = clientesDeClientes.GetAll();
        }

        private void MostrarDespachos()
        {
            DespachoRepository repository = new DespachoRepository();
            var despachos = repository.GetPage(PageIndex, PageSize);

            //if (this.chkSoloSinSincronizar.Checked)
            //    despachos = despachos.Where(d => d.Sincronizado);

            //if (this.chkSoloInformatizados.Checked)
            //    despachos = despachos.Where(d => d.IngresoManual);

            var dtos = from d in despachos.ToList()
                       from c in Clientes
                       from cc in ClientesDeClientes
                       where d.DeclaranteId == c.Id &&
                             d.ImportadorId == cc.Id  
                       orderby d.Id descending
                       select new DespachoDto
                       {
                           Id = d.Id,
                           Anio = d.Anio,
                           Caja = d.Caja ?? 0,
                           DeclaranteId = d.DeclaranteId,
                           F3101 = d.F3101,
                           Familias = d.Familias,
                           FechaSeti = d.FechaSeti,
                           ImportadorId = d.ImportadorId,
                           Legajo = d.Legajo,
                           NombreDeclarante = c.RazonSocial,
                           NombreImportador = cc.RazonSocial,
                           Observaciones = d.Observaciones
                       };

            Despachos = new BindingList<DespachoDto>(dtos.ToList());

            SetPageCount();

            despachoBindingSource.DataSource = Despachos;

            this.lblPage.Text = String.Format("Página {0} de {1}", PageIndex + 1, PageCount);
        }

        private void VerDespachos_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Hide();
            e.Cancel = true;
        }

        private void btnPrimero_Click(object sender, EventArgs e)
        {
            PageIndex = 0;
            MostrarDespachos();
        }

        private void btnAnterior_Click(object sender, EventArgs e)
        {
            if (PageIndex > 0)
                PageIndex--;
            else
                PageIndex = 0;

            MostrarDespachos();
        }

        private void btnSiguiente_Click(object sender, EventArgs e)
        {
            if (PageIndex < PageCount - 1)
                PageIndex++;
            else
                PageIndex = PageCount - 1;

            MostrarDespachos();
        }

        private void btnUltimo_Click(object sender, EventArgs e)
        {
            PageIndex = PageCount-1;
            MostrarDespachos();
        }

        private void btnActualizar_Click(object sender, EventArgs e)
        {
            MostrarDespachos();
        }

        private void chkSoloSinSincronizar_CheckedChanged(object sender, EventArgs e)
        {
            this.PageIndex = 0;
        }

        private void chkSoloInformatizados_CheckedChanged(object sender, EventArgs e)
        {
            this.PageIndex = 0;
        }

    }
}
